package 
{
	import flash.display.Bitmap;
	import flash.display.Stage;
	import flash.display.StageScaleMode;
	import flash.display.StageAlign;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.system.System;
	import flash.utils.Timer;
	import subframes.visual.buttons.BtnMain;
	import tools.GraphicTools;
	import tools.Tools;
	
	import br.com.stimuli.loading.BulkLoader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.*;
	import vk.APIConnection;
	
	import events.FrameEvent;
	import events.SpacegameEvent;
	
	import subframes.*;
	
	/**
	 * Главный фрейм
	 * Представляет собой главный интерфейс, инициализирующий прелоадер и другие элементы
	 * интерфейса.
	 */
	public class Main extends BaseFrame
	{
		/* Данные загруженные с ВК */
		public var VKLoadedData:VKData = null;
		/* Весь игровой контент */
		public var BulkData:BulkLoader = null;
		
		/* Указатели субфреймов */
		private var frInterface:FrMainInterface;
		private var frPreloader:FrPreloader;
		private var frSpaceGame:FrSpaceGame;
		private var frPvp:FrPvp;
		private var frHangar:FrHangar;
		private var frMarket:FrMarket;
		private var frAchievements:FrAchievements;
		
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			if (stage) {
				stage.scaleMode = StageScaleMode.NO_SCALE;
				stage.align = StageAlign.TOP_LEFT;
			}
			trace(root);
			// entry point
			
			/* */
			addEventListener(FrameEvent.FRAME_OPEN, subFramesListener);
			addEventListener(FrameEvent.FRAME_LOADED, subFramesListener);
			addEventListener(FrameEvent.FRAME_CLOSE, subFramesListener);
			
			if (VKLoadedData==null || BulkData==null)
				InitFrPreloader();
			else
				InitFrMainInterface();
			
			
		}
		
		/* Обработчик событий сабфреймов мейнфрейма */
		private function subFramesListener(e:FrameEvent):void
		{			
			var tarFrame:BaseFrame = e.target as BaseFrame;
			trace("subFramesListener >>>>> " + tarFrame);
			
			switch(tarFrame)
			{
				/* Получатель - прелоадер */
				case frPreloader:
					switch(e.type)
					{
						case FrameEvent.FRAME_OPEN:
						trace("--> Прелоадер открыт");
						break;
						case FrameEvent.FRAME_LOADED:
						trace("--> Прелоадер загружен");
						break;
						case FrameEvent.FRAME_CLOSE:
						trace("--> Прелоадер отработал");
							/* Получение загруженных данных */
							VKLoadedData = frPreloader.VKLoadedData;
							BulkData = frPreloader.BulkData;
							/* Удаляем прелоадер */
							frPreloader.ClearFrameListeners();
							removeChild(frPreloader);
							/* Инициализация интерфейса */
							InitFrMainInterface();
						break;
					}
				break;
				
				/* Получатель - фрем начала игры */
				case frSpaceGame:
					switch(e.type)
					{
						case FrameEvent.FRAME_OPEN:
						trace("--> Фрейм меню игры открыт");
						break;
						case FrameEvent.FRAME_LOADED:
						trace("--> Фрейм меню игры загружен");
						break;
						case FrameEvent.FRAME_CLOSE:
						trace("--> Фрейм меню игры отработал");
						/* Фрейм может закрыться с разными параметрами
						 * например с параметров "отмена" или "старт".
						 * Если старт, то закрывая этот фрейм открывается 
						 * фрейм игрового процесса */
						break;
					}
				break;
				
				/* Получатель - фрейм достижений */
				case frAchievements:
					switch(e.type)
					{
						case FrameEvent.FRAME_OPEN:
						trace("--> Прелоадер открыт");
						break;
						case FrameEvent.FRAME_LOADED:
						trace("--> Прелоадер загружен");
						break;
						case FrameEvent.FRAME_CLOSE:
						trace("--> Прелоадер отработал");
						break;
					}
				break;
			}
			
			/* Остановка дальнейшего распространения события */
			e.stopImmediatePropagation();
		}
		
		/* Создание и инициализация интерфейса */
		private function InitFrMainInterface():void
		{
			frInterface = new FrMainInterface(this, frMainInterfaceListener);
			addChild(frInterface);
			frInterface.CreateInterface();
		}
		
		/* Очистка интерфейса */
		private function ClearFrMainInterface():void
		{
			if (frInterface == null)
				return;
			frInterface.ClearInterface();
			removeChild(frInterface);
			frInterface = null;
		}
		
		/* Приёмник событий интерфейса */
		private function frMainInterfaceListener(e:Event):void
		{
			switch(e.type)
			{
				case FrMainInterface.CLICK_ACHIEVEMENTS:
					trace("Main>>> CLICK_ACHIEVEMENTS");
				break;
				case FrMainInterface.CLICK_HANGAR:
					trace("Main>>> CLICK_HANGAR");
				break;
				case FrMainInterface.CLICK_MARKET:
					trace("Main>>> CLICK_MARKET");
				break;
				case FrMainInterface.CLICK_PVP:
					trace("Main>>> CLICK_PVP");
				break;
				case FrMainInterface.CLICK_SPACEGAME:
					ClearFrMainInterface();
					
					var tmrNewInterface:Timer = new Timer(2000, 1);
					tmrNewInterface.addEventListener(TimerEvent.TIMER, function (e:TimerEvent):void
					{
						InitFrMainInterface();
					}, false, 0, true);
					tmrNewInterface.start();
					
					//InitFrSpaceGame();
					trace("Main>>> CLICK_SPACEGAME");
				break;
			}
		}
		
		/* Инициализация прелоадера */
		private function InitFrPreloader():void
		{
			/* Инициализация фрейма FrPreloader. Привязка обработчиков события */
			frPreloader = new FrPreloader(this);
			
			/* Добавляем на сцену и активируем */
			//addChild(frPreloader);
			//frPreloader.OpenFrame();
		}
		
		/* Инициализация фрейма Игра в космосе */
		private function InitFrSpaceGame():void
		{
			/* Инициализация фрейма FrPreloader. Привязка обработчиков события */
			//frSpaceGame = new FrSpaceGame(this);
			
			///* Добавляем на сцену и активируем */
			//addChild(frSpaceGame);
			//frSpaceGame.InitFrame();
		}
		
	}
	
}